package Polyglot;

import java.io.File;
import java.io.IOException;
import java.math.BigInteger;

import util.UInt64;

public class PgKey {
	
	private final static UInt64 Random64[] = {
			   new UInt64(new BigInteger("9D39247E33776D41",16)), new UInt64(new BigInteger("2AF7398005AAA5C7",16)), new UInt64(new BigInteger("44DB015024623547",16)), new UInt64(new BigInteger("9C15F73E62A76AE2",16)),
			   new UInt64(new BigInteger("75834465489C0C89",16)), new UInt64(new BigInteger("3290AC3A203001BF",16)), new UInt64(new BigInteger("0FBBAD1F61042279",16)), new UInt64(new BigInteger("E83A908FF2FB60CA",16)),
			   new UInt64(new BigInteger("0D7E765D58755C10",16)), new UInt64(new BigInteger("1A083822CEAFE02D",16)), new UInt64(new BigInteger("9605D5F0E25EC3B0",16)), new UInt64(new BigInteger("D021FF5CD13A2ED5",16)),
			   new UInt64(new BigInteger("40BDF15D4A672E32",16)), new UInt64(new BigInteger("011355146FD56395",16)), new UInt64(new BigInteger("5DB4832046F3D9E5",16)), new UInt64(new BigInteger("239F8B2D7FF719CC",16)),
			   new UInt64(new BigInteger("05D1A1AE85B49AA1",16)), new UInt64(new BigInteger("679F848F6E8FC971",16)), new UInt64(new BigInteger("7449BBFF801FED0B",16)), new UInt64(new BigInteger("7D11CDB1C3B7ADF0",16)),
			   new UInt64(new BigInteger("82C7709E781EB7CC",16)), new UInt64(new BigInteger("F3218F1C9510786C",16)), new UInt64(new BigInteger("331478F3AF51BBE6",16)), new UInt64(new BigInteger("4BB38DE5E7219443",16)),
			   new UInt64(new BigInteger("AA649C6EBCFD50FC",16)), new UInt64(new BigInteger("8DBD98A352AFD40B",16)), new UInt64(new BigInteger("87D2074B81D79217",16)), new UInt64(new BigInteger("19F3C751D3E92AE1",16)),
			   new UInt64(new BigInteger("B4AB30F062B19ABF",16)), new UInt64(new BigInteger("7B0500AC42047AC4",16)), new UInt64(new BigInteger("C9452CA81A09D85D",16)), new UInt64(new BigInteger("24AA6C514DA27500",16)),
			   new UInt64(new BigInteger("4C9F34427501B447",16)), new UInt64(new BigInteger("14A68FD73C910841",16)), new UInt64(new BigInteger("A71B9B83461CBD93",16)), new UInt64(new BigInteger("03488B95B0F1850F",16)),
			   new UInt64(new BigInteger("637B2B34FF93C040",16)), new UInt64(new BigInteger("09D1BC9A3DD90A94",16)), new UInt64(new BigInteger("3575668334A1DD3B",16)), new UInt64(new BigInteger("735E2B97A4C45A23",16)),
			   new UInt64(new BigInteger("18727070F1BD400B",16)), new UInt64(new BigInteger("1FCBACD259BF02E7",16)), new UInt64(new BigInteger("D310A7C2CE9B6555",16)), new UInt64(new BigInteger("BF983FE0FE5D8244",16)),
			   new UInt64(new BigInteger("9F74D14F7454A824",16)), new UInt64(new BigInteger("51EBDC4AB9BA3035",16)), new UInt64(new BigInteger("5C82C505DB9AB0FA",16)), new UInt64(new BigInteger("FCF7FE8A3430B241",16)),
			   new UInt64(new BigInteger("3253A729B9BA3DDE",16)), new UInt64(new BigInteger("8C74C368081B3075",16)), new UInt64(new BigInteger("B9BC6C87167C33E7",16)), new UInt64(new BigInteger("7EF48F2B83024E20",16)),
			   new UInt64(new BigInteger("11D505D4C351BD7F",16)), new UInt64(new BigInteger("6568FCA92C76A243",16)), new UInt64(new BigInteger("4DE0B0F40F32A7B8",16)), new UInt64(new BigInteger("96D693460CC37E5D",16)),
			   new UInt64(new BigInteger("42E240CB63689F2F",16)), new UInt64(new BigInteger("6D2BDCDAE2919661",16)), new UInt64(new BigInteger("42880B0236E4D951",16)), new UInt64(new BigInteger("5F0F4A5898171BB6",16)),
			   new UInt64(new BigInteger("39F890F579F92F88",16)), new UInt64(new BigInteger("93C5B5F47356388B",16)), new UInt64(new BigInteger("63DC359D8D231B78",16)), new UInt64(new BigInteger("EC16CA8AEA98AD76",16)),
			   new UInt64(new BigInteger("5355F900C2A82DC7",16)), new UInt64(new BigInteger("07FB9F855A997142",16)), new UInt64(new BigInteger("5093417AA8A7ED5E",16)), new UInt64(new BigInteger("7BCBC38DA25A7F3C",16)),
			   new UInt64(new BigInteger("19FC8A768CF4B6D4",16)), new UInt64(new BigInteger("637A7780DECFC0D9",16)), new UInt64(new BigInteger("8249A47AEE0E41F7",16)), new UInt64(new BigInteger("79AD695501E7D1E8",16)),
			   new UInt64(new BigInteger("14ACBAF4777D5776",16)), new UInt64(new BigInteger("F145B6BECCDEA195",16)), new UInt64(new BigInteger("DABF2AC8201752FC",16)), new UInt64(new BigInteger("24C3C94DF9C8D3F6",16)),
			   new UInt64(new BigInteger("BB6E2924F03912EA",16)), new UInt64(new BigInteger("0CE26C0B95C980D9",16)), new UInt64(new BigInteger("A49CD132BFBF7CC4",16)), new UInt64(new BigInteger("E99D662AF4243939",16)),
			   new UInt64(new BigInteger("27E6AD7891165C3F",16)), new UInt64(new BigInteger("8535F040B9744FF1",16)), new UInt64(new BigInteger("54B3F4FA5F40D873",16)), new UInt64(new BigInteger("72B12C32127FED2B",16)),
			   new UInt64(new BigInteger("EE954D3C7B411F47",16)), new UInt64(new BigInteger("9A85AC909A24EAA1",16)), new UInt64(new BigInteger("70AC4CD9F04F21F5",16)), new UInt64(new BigInteger("F9B89D3E99A075C2",16)),
			   new UInt64(new BigInteger("87B3E2B2B5C907B1",16)), new UInt64(new BigInteger("A366E5B8C54F48B8",16)), new UInt64(new BigInteger("AE4A9346CC3F7CF2",16)), new UInt64(new BigInteger("1920C04D47267BBD",16)),
			   new UInt64(new BigInteger("87BF02C6B49E2AE9",16)), new UInt64(new BigInteger("092237AC237F3859",16)), new UInt64(new BigInteger("FF07F64EF8ED14D0",16)), new UInt64(new BigInteger("8DE8DCA9F03CC54E",16)),
			   new UInt64(new BigInteger("9C1633264DB49C89",16)), new UInt64(new BigInteger("B3F22C3D0B0B38ED",16)), new UInt64(new BigInteger("390E5FB44D01144B",16)), new UInt64(new BigInteger("5BFEA5B4712768E9",16)),
			   new UInt64(new BigInteger("1E1032911FA78984",16)), new UInt64(new BigInteger("9A74ACB964E78CB3",16)), new UInt64(new BigInteger("4F80F7A035DAFB04",16)), new UInt64(new BigInteger("6304D09A0B3738C4",16)),
			   new UInt64(new BigInteger("2171E64683023A08",16)), new UInt64(new BigInteger("5B9B63EB9CEFF80C",16)), new UInt64(new BigInteger("506AACF489889342",16)), new UInt64(new BigInteger("1881AFC9A3A701D6",16)),
			   new UInt64(new BigInteger("6503080440750644",16)), new UInt64(new BigInteger("DFD395339CDBF4A7",16)), new UInt64(new BigInteger("EF927DBCF00C20F2",16)), new UInt64(new BigInteger("7B32F7D1E03680EC",16)),
			   new UInt64(new BigInteger("B9FD7620E7316243",16)), new UInt64(new BigInteger("05A7E8A57DB91B77",16)), new UInt64(new BigInteger("B5889C6E15630A75",16)), new UInt64(new BigInteger("4A750A09CE9573F7",16)),
			   new UInt64(new BigInteger("CF464CEC899A2F8A",16)), new UInt64(new BigInteger("F538639CE705B824",16)), new UInt64(new BigInteger("3C79A0FF5580EF7F",16)), new UInt64(new BigInteger("EDE6C87F8477609D",16)),
			   new UInt64(new BigInteger("799E81F05BC93F31",16)), new UInt64(new BigInteger("86536B8CF3428A8C",16)), new UInt64(new BigInteger("97D7374C60087B73",16)), new UInt64(new BigInteger("A246637CFF328532",16)),
			   new UInt64(new BigInteger("043FCAE60CC0EBA0",16)), new UInt64(new BigInteger("920E449535DD359E",16)), new UInt64(new BigInteger("70EB093B15B290CC",16)), new UInt64(new BigInteger("73A1921916591CBD",16)),
			   new UInt64(new BigInteger("56436C9FE1A1AA8D",16)), new UInt64(new BigInteger("EFAC4B70633B8F81",16)), new UInt64(new BigInteger("BB215798D45DF7AF",16)), new UInt64(new BigInteger("45F20042F24F1768",16)),
			   new UInt64(new BigInteger("930F80F4E8EB7462",16)), new UInt64(new BigInteger("FF6712FFCFD75EA1",16)), new UInt64(new BigInteger("AE623FD67468AA70",16)), new UInt64(new BigInteger("DD2C5BC84BC8D8FC",16)),
			   new UInt64(new BigInteger("7EED120D54CF2DD9",16)), new UInt64(new BigInteger("22FE545401165F1C",16)), new UInt64(new BigInteger("C91800E98FB99929",16)), new UInt64(new BigInteger("808BD68E6AC10365",16)),
			   new UInt64(new BigInteger("DEC468145B7605F6",16)), new UInt64(new BigInteger("1BEDE3A3AEF53302",16)), new UInt64(new BigInteger("43539603D6C55602",16)), new UInt64(new BigInteger("AA969B5C691CCB7A",16)),
			   new UInt64(new BigInteger("A87832D392EFEE56",16)), new UInt64(new BigInteger("65942C7B3C7E11AE",16)), new UInt64(new BigInteger("DED2D633CAD004F6",16)), new UInt64(new BigInteger("21F08570F420E565",16)),
			   new UInt64(new BigInteger("B415938D7DA94E3C",16)), new UInt64(new BigInteger("91B859E59ECB6350",16)), new UInt64(new BigInteger("10CFF333E0ED804A",16)), new UInt64(new BigInteger("28AED140BE0BB7DD",16)),
			   new UInt64(new BigInteger("C5CC1D89724FA456",16)), new UInt64(new BigInteger("5648F680F11A2741",16)), new UInt64(new BigInteger("2D255069F0B7DAB3",16)), new UInt64(new BigInteger("9BC5A38EF729ABD4",16)),
			   new UInt64(new BigInteger("EF2F054308F6A2BC",16)), new UInt64(new BigInteger("AF2042F5CC5C2858",16)), new UInt64(new BigInteger("480412BAB7F5BE2A",16)), new UInt64(new BigInteger("AEF3AF4A563DFE43",16)),
			   new UInt64(new BigInteger("19AFE59AE451497F",16)), new UInt64(new BigInteger("52593803DFF1E840",16)), new UInt64(new BigInteger("F4F076E65F2CE6F0",16)), new UInt64(new BigInteger("11379625747D5AF3",16)),
			   new UInt64(new BigInteger("BCE5D2248682C115",16)), new UInt64(new BigInteger("9DA4243DE836994F",16)), new UInt64(new BigInteger("066F70B33FE09017",16)), new UInt64(new BigInteger("4DC4DE189B671A1C",16)),
			   new UInt64(new BigInteger("51039AB7712457C3",16)), new UInt64(new BigInteger("C07A3F80C31FB4B4",16)), new UInt64(new BigInteger("B46EE9C5E64A6E7C",16)), new UInt64(new BigInteger("B3819A42ABE61C87",16)),
			   new UInt64(new BigInteger("21A007933A522A20",16)), new UInt64(new BigInteger("2DF16F761598AA4F",16)), new UInt64(new BigInteger("763C4A1371B368FD",16)), new UInt64(new BigInteger("F793C46702E086A0",16)),
			   new UInt64(new BigInteger("D7288E012AEB8D31",16)), new UInt64(new BigInteger("DE336A2A4BC1C44B",16)), new UInt64(new BigInteger("0BF692B38D079F23",16)), new UInt64(new BigInteger("2C604A7A177326B3",16)),
			   new UInt64(new BigInteger("4850E73E03EB6064",16)), new UInt64(new BigInteger("CFC447F1E53C8E1B",16)), new UInt64(new BigInteger("B05CA3F564268D99",16)), new UInt64(new BigInteger("9AE182C8BC9474E8",16)),
			   new UInt64(new BigInteger("A4FC4BD4FC5558CA",16)), new UInt64(new BigInteger("E755178D58FC4E76",16)), new UInt64(new BigInteger("69B97DB1A4C03DFE",16)), new UInt64(new BigInteger("F9B5B7C4ACC67C96",16)),
			   new UInt64(new BigInteger("FC6A82D64B8655FB",16)), new UInt64(new BigInteger("9C684CB6C4D24417",16)), new UInt64(new BigInteger("8EC97D2917456ED0",16)), new UInt64(new BigInteger("6703DF9D2924E97E",16)),
			   new UInt64(new BigInteger("C547F57E42A7444E",16)), new UInt64(new BigInteger("78E37644E7CAD29E",16)), new UInt64(new BigInteger("FE9A44E9362F05FA",16)), new UInt64(new BigInteger("08BD35CC38336615",16)),
			   new UInt64(new BigInteger("9315E5EB3A129ACE",16)), new UInt64(new BigInteger("94061B871E04DF75",16)), new UInt64(new BigInteger("DF1D9F9D784BA010",16)), new UInt64(new BigInteger("3BBA57B68871B59D",16)),
			   new UInt64(new BigInteger("D2B7ADEEDED1F73F",16)), new UInt64(new BigInteger("F7A255D83BC373F8",16)), new UInt64(new BigInteger("D7F4F2448C0CEB81",16)), new UInt64(new BigInteger("D95BE88CD210FFA7",16)),
			   new UInt64(new BigInteger("336F52F8FF4728E7",16)), new UInt64(new BigInteger("A74049DAC312AC71",16)), new UInt64(new BigInteger("A2F61BB6E437FDB5",16)), new UInt64(new BigInteger("4F2A5CB07F6A35B3",16)),
			   new UInt64(new BigInteger("87D380BDA5BF7859",16)), new UInt64(new BigInteger("16B9F7E06C453A21",16)), new UInt64(new BigInteger("7BA2484C8A0FD54E",16)), new UInt64(new BigInteger("F3A678CAD9A2E38C",16)),
			   new UInt64(new BigInteger("39B0BF7DDE437BA2",16)), new UInt64(new BigInteger("FCAF55C1BF8A4424",16)), new UInt64(new BigInteger("18FCF680573FA594",16)), new UInt64(new BigInteger("4C0563B89F495AC3",16)),
			   new UInt64(new BigInteger("40E087931A00930D",16)), new UInt64(new BigInteger("8CFFA9412EB642C1",16)), new UInt64(new BigInteger("68CA39053261169F",16)), new UInt64(new BigInteger("7A1EE967D27579E2",16)),
			   new UInt64(new BigInteger("9D1D60E5076F5B6F",16)), new UInt64(new BigInteger("3810E399B6F65BA2",16)), new UInt64(new BigInteger("32095B6D4AB5F9B1",16)), new UInt64(new BigInteger("35CAB62109DD038A",16)),
			   new UInt64(new BigInteger("A90B24499FCFAFB1",16)), new UInt64(new BigInteger("77A225A07CC2C6BD",16)), new UInt64(new BigInteger("513E5E634C70E331",16)), new UInt64(new BigInteger("4361C0CA3F692F12",16)),
			   new UInt64(new BigInteger("D941ACA44B20A45B",16)), new UInt64(new BigInteger("528F7C8602C5807B",16)), new UInt64(new BigInteger("52AB92BEB9613989",16)), new UInt64(new BigInteger("9D1DFA2EFC557F73",16)),
			   new UInt64(new BigInteger("722FF175F572C348",16)), new UInt64(new BigInteger("1D1260A51107FE97",16)), new UInt64(new BigInteger("7A249A57EC0C9BA2",16)), new UInt64(new BigInteger("04208FE9E8F7F2D6",16)),
			   new UInt64(new BigInteger("5A110C6058B920A0",16)), new UInt64(new BigInteger("0CD9A497658A5698",16)), new UInt64(new BigInteger("56FD23C8F9715A4C",16)), new UInt64(new BigInteger("284C847B9D887AAE",16)),
			   new UInt64(new BigInteger("04FEABFBBDB619CB",16)), new UInt64(new BigInteger("742E1E651C60BA83",16)), new UInt64(new BigInteger("9A9632E65904AD3C",16)), new UInt64(new BigInteger("881B82A13B51B9E2",16)),
			   new UInt64(new BigInteger("506E6744CD974924",16)), new UInt64(new BigInteger("B0183DB56FFC6A79",16)), new UInt64(new BigInteger("0ED9B915C66ED37E",16)), new UInt64(new BigInteger("5E11E86D5873D484",16)),
			   new UInt64(new BigInteger("F678647E3519AC6E",16)), new UInt64(new BigInteger("1B85D488D0F20CC5",16)), new UInt64(new BigInteger("DAB9FE6525D89021",16)), new UInt64(new BigInteger("0D151D86ADB73615",16)),
			   new UInt64(new BigInteger("A865A54EDCC0F019",16)), new UInt64(new BigInteger("93C42566AEF98FFB",16)), new UInt64(new BigInteger("99E7AFEABE000731",16)), new UInt64(new BigInteger("48CBFF086DDF285A",16)),
			   new UInt64(new BigInteger("7F9B6AF1EBF78BAF",16)), new UInt64(new BigInteger("58627E1A149BBA21",16)), new UInt64(new BigInteger("2CD16E2ABD791E33",16)), new UInt64(new BigInteger("D363EFF5F0977996",16)),
			   new UInt64(new BigInteger("0CE2A38C344A6EED",16)), new UInt64(new BigInteger("1A804AADB9CFA741",16)), new UInt64(new BigInteger("907F30421D78C5DE",16)), new UInt64(new BigInteger("501F65EDB3034D07",16)),
			   new UInt64(new BigInteger("37624AE5A48FA6E9",16)), new UInt64(new BigInteger("957BAF61700CFF4E",16)), new UInt64(new BigInteger("3A6C27934E31188A",16)), new UInt64(new BigInteger("D49503536ABCA345",16)),
			   new UInt64(new BigInteger("088E049589C432E0",16)), new UInt64(new BigInteger("F943AEE7FEBF21B8",16)), new UInt64(new BigInteger("6C3B8E3E336139D3",16)), new UInt64(new BigInteger("364F6FFA464EE52E",16)),
			   new UInt64(new BigInteger("D60F6DCEDC314222",16)), new UInt64(new BigInteger("56963B0DCA418FC0",16)), new UInt64(new BigInteger("16F50EDF91E513AF",16)), new UInt64(new BigInteger("EF1955914B609F93",16)),
			   new UInt64(new BigInteger("565601C0364E3228",16)), new UInt64(new BigInteger("ECB53939887E8175",16)), new UInt64(new BigInteger("BAC7A9A18531294B",16)), new UInt64(new BigInteger("B344C470397BBA52",16)),
			   new UInt64(new BigInteger("65D34954DAF3CEBD",16)), new UInt64(new BigInteger("B4B81B3FA97511E2",16)), new UInt64(new BigInteger("B422061193D6F6A7",16)), new UInt64(new BigInteger("071582401C38434D",16)),
			   new UInt64(new BigInteger("7A13F18BBEDC4FF5",16)), new UInt64(new BigInteger("BC4097B116C524D2",16)), new UInt64(new BigInteger("59B97885E2F2EA28",16)), new UInt64(new BigInteger("99170A5DC3115544",16)),
			   new UInt64(new BigInteger("6F423357E7C6A9F9",16)), new UInt64(new BigInteger("325928EE6E6F8794",16)), new UInt64(new BigInteger("D0E4366228B03343",16)), new UInt64(new BigInteger("565C31F7DE89EA27",16)),
			   new UInt64(new BigInteger("30F5611484119414",16)), new UInt64(new BigInteger("D873DB391292ED4F",16)), new UInt64(new BigInteger("7BD94E1D8E17DEBC",16)), new UInt64(new BigInteger("C7D9F16864A76E94",16)),
			   new UInt64(new BigInteger("947AE053EE56E63C",16)), new UInt64(new BigInteger("C8C93882F9475F5F",16)), new UInt64(new BigInteger("3A9BF55BA91F81CA",16)), new UInt64(new BigInteger("D9A11FBB3D9808E4",16)),
			   new UInt64(new BigInteger("0FD22063EDC29FCA",16)), new UInt64(new BigInteger("B3F256D8ACA0B0B9",16)), new UInt64(new BigInteger("B03031A8B4516E84",16)), new UInt64(new BigInteger("35DD37D5871448AF",16)),
			   new UInt64(new BigInteger("E9F6082B05542E4E",16)), new UInt64(new BigInteger("EBFAFA33D7254B59",16)), new UInt64(new BigInteger("9255ABB50D532280",16)), new UInt64(new BigInteger("B9AB4CE57F2D34F3",16)),
			   new UInt64(new BigInteger("693501D628297551",16)), new UInt64(new BigInteger("C62C58F97DD949BF",16)), new UInt64(new BigInteger("CD454F8F19C5126A",16)), new UInt64(new BigInteger("BBE83F4ECC2BDECB",16)),
			   new UInt64(new BigInteger("DC842B7E2819E230",16)), new UInt64(new BigInteger("BA89142E007503B8",16)), new UInt64(new BigInteger("A3BC941D0A5061CB",16)), new UInt64(new BigInteger("E9F6760E32CD8021",16)),
			   new UInt64(new BigInteger("09C7E552BC76492F",16)), new UInt64(new BigInteger("852F54934DA55CC9",16)), new UInt64(new BigInteger("8107FCCF064FCF56",16)), new UInt64(new BigInteger("098954D51FFF6580",16)),
			   new UInt64(new BigInteger("23B70EDB1955C4BF",16)), new UInt64(new BigInteger("C330DE426430F69D",16)), new UInt64(new BigInteger("4715ED43E8A45C0A",16)), new UInt64(new BigInteger("A8D7E4DAB780A08D",16)),
			   new UInt64(new BigInteger("0572B974F03CE0BB",16)), new UInt64(new BigInteger("B57D2E985E1419C7",16)), new UInt64(new BigInteger("E8D9ECBE2CF3D73F",16)), new UInt64(new BigInteger("2FE4B17170E59750",16)),
			   new UInt64(new BigInteger("11317BA87905E790",16)), new UInt64(new BigInteger("7FBF21EC8A1F45EC",16)), new UInt64(new BigInteger("1725CABFCB045B00",16)), new UInt64(new BigInteger("964E915CD5E2B207",16)),
			   new UInt64(new BigInteger("3E2B8BCBF016D66D",16)), new UInt64(new BigInteger("BE7444E39328A0AC",16)), new UInt64(new BigInteger("F85B2B4FBCDE44B7",16)), new UInt64(new BigInteger("49353FEA39BA63B1",16)),
			   new UInt64(new BigInteger("1DD01AAFCD53486A",16)), new UInt64(new BigInteger("1FCA8A92FD719F85",16)), new UInt64(new BigInteger("FC7C95D827357AFA",16)), new UInt64(new BigInteger("18A6A990C8B35EBD",16)),
			   new UInt64(new BigInteger("CCCB7005C6B9C28D",16)), new UInt64(new BigInteger("3BDBB92C43B17F26",16)), new UInt64(new BigInteger("AA70B5B4F89695A2",16)), new UInt64(new BigInteger("E94C39A54A98307F",16)),
			   new UInt64(new BigInteger("B7A0B174CFF6F36E",16)), new UInt64(new BigInteger("D4DBA84729AF48AD",16)), new UInt64(new BigInteger("2E18BC1AD9704A68",16)), new UInt64(new BigInteger("2DE0966DAF2F8B1C",16)),
			   new UInt64(new BigInteger("B9C11D5B1E43A07E",16)), new UInt64(new BigInteger("64972D68DEE33360",16)), new UInt64(new BigInteger("94628D38D0C20584",16)), new UInt64(new BigInteger("DBC0D2B6AB90A559",16)),
			   new UInt64(new BigInteger("D2733C4335C6A72F",16)), new UInt64(new BigInteger("7E75D99D94A70F4D",16)), new UInt64(new BigInteger("6CED1983376FA72B",16)), new UInt64(new BigInteger("97FCAACBF030BC24",16)),
			   new UInt64(new BigInteger("7B77497B32503B12",16)), new UInt64(new BigInteger("8547EDDFB81CCB94",16)), new UInt64(new BigInteger("79999CDFF70902CB",16)), new UInt64(new BigInteger("CFFE1939438E9B24",16)),
			   new UInt64(new BigInteger("829626E3892D95D7",16)), new UInt64(new BigInteger("92FAE24291F2B3F1",16)), new UInt64(new BigInteger("63E22C147B9C3403",16)), new UInt64(new BigInteger("C678B6D860284A1C",16)),
			   new UInt64(new BigInteger("5873888850659AE7",16)), new UInt64(new BigInteger("0981DCD296A8736D",16)), new UInt64(new BigInteger("9F65789A6509A440",16)), new UInt64(new BigInteger("9FF38FED72E9052F",16)),
			   new UInt64(new BigInteger("E479EE5B9930578C",16)), new UInt64(new BigInteger("E7F28ECD2D49EECD",16)), new UInt64(new BigInteger("56C074A581EA17FE",16)), new UInt64(new BigInteger("5544F7D774B14AEF",16)),
			   new UInt64(new BigInteger("7B3F0195FC6F290F",16)), new UInt64(new BigInteger("12153635B2C0CF57",16)), new UInt64(new BigInteger("7F5126DBBA5E0CA7",16)), new UInt64(new BigInteger("7A76956C3EAFB413",16)),
			   new UInt64(new BigInteger("3D5774A11D31AB39",16)), new UInt64(new BigInteger("8A1B083821F40CB4",16)), new UInt64(new BigInteger("7B4A38E32537DF62",16)), new UInt64(new BigInteger("950113646D1D6E03",16)),
			   new UInt64(new BigInteger("4DA8979A0041E8A9",16)), new UInt64(new BigInteger("3BC36E078F7515D7",16)), new UInt64(new BigInteger("5D0A12F27AD310D1",16)), new UInt64(new BigInteger("7F9D1A2E1EBE1327",16)),
			   new UInt64(new BigInteger("DA3A361B1C5157B1",16)), new UInt64(new BigInteger("DCDD7D20903D0C25",16)), new UInt64(new BigInteger("36833336D068F707",16)), new UInt64(new BigInteger("CE68341F79893389",16)),
			   new UInt64(new BigInteger("AB9090168DD05F34",16)), new UInt64(new BigInteger("43954B3252DC25E5",16)), new UInt64(new BigInteger("B438C2B67F98E5E9",16)), new UInt64(new BigInteger("10DCD78E3851A492",16)),
			   new UInt64(new BigInteger("DBC27AB5447822BF",16)), new UInt64(new BigInteger("9B3CDB65F82CA382",16)), new UInt64(new BigInteger("B67B7896167B4C84",16)), new UInt64(new BigInteger("BFCED1B0048EAC50",16)),
			   new UInt64(new BigInteger("A9119B60369FFEBD",16)), new UInt64(new BigInteger("1FFF7AC80904BF45",16)), new UInt64(new BigInteger("AC12FB171817EEE7",16)), new UInt64(new BigInteger("AF08DA9177DDA93D",16)),
			   new UInt64(new BigInteger("1B0CAB936E65C744",16)), new UInt64(new BigInteger("B559EB1D04E5E932",16)), new UInt64(new BigInteger("C37B45B3F8D6F2BA",16)), new UInt64(new BigInteger("C3A9DC228CAAC9E9",16)),
			   new UInt64(new BigInteger("F3B8B6675A6507FF",16)), new UInt64(new BigInteger("9FC477DE4ED681DA",16)), new UInt64(new BigInteger("67378D8ECCEF96CB",16)), new UInt64(new BigInteger("6DD856D94D259236",16)),
			   new UInt64(new BigInteger("A319CE15B0B4DB31",16)), new UInt64(new BigInteger("073973751F12DD5E",16)), new UInt64(new BigInteger("8A8E849EB32781A5",16)), new UInt64(new BigInteger("E1925C71285279F5",16)),
			   new UInt64(new BigInteger("74C04BF1790C0EFE",16)), new UInt64(new BigInteger("4DDA48153C94938A",16)), new UInt64(new BigInteger("9D266D6A1CC0542C",16)), new UInt64(new BigInteger("7440FB816508C4FE",16)),
			   new UInt64(new BigInteger("13328503DF48229F",16)), new UInt64(new BigInteger("D6BF7BAEE43CAC40",16)), new UInt64(new BigInteger("4838D65F6EF6748F",16)), new UInt64(new BigInteger("1E152328F3318DEA",16)),
			   new UInt64(new BigInteger("8F8419A348F296BF",16)), new UInt64(new BigInteger("72C8834A5957B511",16)), new UInt64(new BigInteger("D7A023A73260B45C",16)), new UInt64(new BigInteger("94EBC8ABCFB56DAE",16)),
			   new UInt64(new BigInteger("9FC10D0F989993E0",16)), new UInt64(new BigInteger("DE68A2355B93CAE6",16)), new UInt64(new BigInteger("A44CFE79AE538BBE",16)), new UInt64(new BigInteger("9D1D84FCCE371425",16)),
			   new UInt64(new BigInteger("51D2B1AB2DDFB636",16)), new UInt64(new BigInteger("2FD7E4B9E72CD38C",16)), new UInt64(new BigInteger("65CA5B96B7552210",16)), new UInt64(new BigInteger("DD69A0D8AB3B546D",16)),
			   new UInt64(new BigInteger("604D51B25FBF70E2",16)), new UInt64(new BigInteger("73AA8A564FB7AC9E",16)), new UInt64(new BigInteger("1A8C1E992B941148",16)), new UInt64(new BigInteger("AAC40A2703D9BEA0",16)),
			   new UInt64(new BigInteger("764DBEAE7FA4F3A6",16)), new UInt64(new BigInteger("1E99B96E70A9BE8B",16)), new UInt64(new BigInteger("2C5E9DEB57EF4743",16)), new UInt64(new BigInteger("3A938FEE32D29981",16)),
			   new UInt64(new BigInteger("26E6DB8FFDF5ADFE",16)), new UInt64(new BigInteger("469356C504EC9F9D",16)), new UInt64(new BigInteger("C8763C5B08D1908C",16)), new UInt64(new BigInteger("3F6C6AF859D80055",16)),
			   new UInt64(new BigInteger("7F7CC39420A3A545",16)), new UInt64(new BigInteger("9BFB227EBDF4C5CE",16)), new UInt64(new BigInteger("89039D79D6FC5C5C",16)), new UInt64(new BigInteger("8FE88B57305E2AB6",16)),
			   new UInt64(new BigInteger("A09E8C8C35AB96DE",16)), new UInt64(new BigInteger("FA7E393983325753",16)), new UInt64(new BigInteger("D6B6D0ECC617C699",16)), new UInt64(new BigInteger("DFEA21EA9E7557E3",16)),
			   new UInt64(new BigInteger("B67C1FA481680AF8",16)), new UInt64(new BigInteger("CA1E3785A9E724E5",16)), new UInt64(new BigInteger("1CFC8BED0D681639",16)), new UInt64(new BigInteger("D18D8549D140CAEA",16)),
			   new UInt64(new BigInteger("4ED0FE7E9DC91335",16)), new UInt64(new BigInteger("E4DBF0634473F5D2",16)), new UInt64(new BigInteger("1761F93A44D5AEFE",16)), new UInt64(new BigInteger("53898E4C3910DA55",16)),
			   new UInt64(new BigInteger("734DE8181F6EC39A",16)), new UInt64(new BigInteger("2680B122BAA28D97",16)), new UInt64(new BigInteger("298AF231C85BAFAB",16)), new UInt64(new BigInteger("7983EED3740847D5",16)),
			   new UInt64(new BigInteger("66C1A2A1A60CD889",16)), new UInt64(new BigInteger("9E17E49642A3E4C1",16)), new UInt64(new BigInteger("EDB454E7BADC0805",16)), new UInt64(new BigInteger("50B704CAB602C329",16)),
			   new UInt64(new BigInteger("4CC317FB9CDDD023",16)), new UInt64(new BigInteger("66B4835D9EAFEA22",16)), new UInt64(new BigInteger("219B97E26FFC81BD",16)), new UInt64(new BigInteger("261E4E4C0A333A9D",16)),
			   new UInt64(new BigInteger("1FE2CCA76517DB90",16)), new UInt64(new BigInteger("D7504DFA8816EDBB",16)), new UInt64(new BigInteger("B9571FA04DC089C8",16)), new UInt64(new BigInteger("1DDC0325259B27DE",16)),
			   new UInt64(new BigInteger("CF3F4688801EB9AA",16)), new UInt64(new BigInteger("F4F5D05C10CAB243",16)), new UInt64(new BigInteger("38B6525C21A42B0E",16)), new UInt64(new BigInteger("36F60E2BA4FA6800",16)),
			   new UInt64(new BigInteger("EB3593803173E0CE",16)), new UInt64(new BigInteger("9C4CD6257C5A3603",16)), new UInt64(new BigInteger("AF0C317D32ADAA8A",16)), new UInt64(new BigInteger("258E5A80C7204C4B",16)),
			   new UInt64(new BigInteger("8B889D624D44885D",16)), new UInt64(new BigInteger("F4D14597E660F855",16)), new UInt64(new BigInteger("D4347F66EC8941C3",16)), new UInt64(new BigInteger("E699ED85B0DFB40D",16)),
			   new UInt64(new BigInteger("2472F6207C2D0484",16)), new UInt64(new BigInteger("C2A1E7B5B459AEB5",16)), new UInt64(new BigInteger("AB4F6451CC1D45EC",16)), new UInt64(new BigInteger("63767572AE3D6174",16)),
			   new UInt64(new BigInteger("A59E0BD101731A28",16)), new UInt64(new BigInteger("116D0016CB948F09",16)), new UInt64(new BigInteger("2CF9C8CA052F6E9F",16)), new UInt64(new BigInteger("0B090A7560A968E3",16)),
			   new UInt64(new BigInteger("ABEEDDB2DDE06FF1",16)), new UInt64(new BigInteger("58EFC10B06A2068D",16)), new UInt64(new BigInteger("C6E57A78FBD986E0",16)), new UInt64(new BigInteger("2EAB8CA63CE802D7",16)),
			   new UInt64(new BigInteger("14A195640116F336",16)), new UInt64(new BigInteger("7C0828DD624EC390",16)), new UInt64(new BigInteger("D74BBE77E6116AC7",16)), new UInt64(new BigInteger("804456AF10F5FB53",16)),
			   new UInt64(new BigInteger("EBE9EA2ADF4321C7",16)), new UInt64(new BigInteger("03219A39EE587A30",16)), new UInt64(new BigInteger("49787FEF17AF9924",16)), new UInt64(new BigInteger("A1E9300CD8520548",16)),
			   new UInt64(new BigInteger("5B45E522E4B1B4EF",16)), new UInt64(new BigInteger("B49C3B3995091A36",16)), new UInt64(new BigInteger("D4490AD526F14431",16)), new UInt64(new BigInteger("12A8F216AF9418C2",16)),
			   new UInt64(new BigInteger("001F837CC7350524",16)), new UInt64(new BigInteger("1877B51E57A764D5",16)), new UInt64(new BigInteger("A2853B80F17F58EE",16)), new UInt64(new BigInteger("993E1DE72D36D310",16)),
			   new UInt64(new BigInteger("B3598080CE64A656",16)), new UInt64(new BigInteger("252F59CF0D9F04BB",16)), new UInt64(new BigInteger("D23C8E176D113600",16)), new UInt64(new BigInteger("1BDA0492E7E4586E",16)),
			   new UInt64(new BigInteger("21E0BD5026C619BF",16)), new UInt64(new BigInteger("3B097ADAF088F94E",16)), new UInt64(new BigInteger("8D14DEDB30BE846E",16)), new UInt64(new BigInteger("F95CFFA23AF5F6F4",16)),
			   new UInt64(new BigInteger("3871700761B3F743",16)), new UInt64(new BigInteger("CA672B91E9E4FA16",16)), new UInt64(new BigInteger("64C8E531BFF53B55",16)), new UInt64(new BigInteger("241260ED4AD1E87D",16)),
			   new UInt64(new BigInteger("106C09B972D2E822",16)), new UInt64(new BigInteger("7FBA195410E5CA30",16)), new UInt64(new BigInteger("7884D9BC6CB569D8",16)), new UInt64(new BigInteger("0647DFEDCD894A29",16)),
			   new UInt64(new BigInteger("63573FF03E224774",16)), new UInt64(new BigInteger("4FC8E9560F91B123",16)), new UInt64(new BigInteger("1DB956E450275779",16)), new UInt64(new BigInteger("B8D91274B9E9D4FB",16)),
			   new UInt64(new BigInteger("A2EBEE47E2FBFCE1",16)), new UInt64(new BigInteger("D9F1F30CCD97FB09",16)), new UInt64(new BigInteger("EFED53D75FD64E6B",16)), new UInt64(new BigInteger("2E6D02C36017F67F",16)),
			   new UInt64(new BigInteger("A9AA4D20DB084E9B",16)), new UInt64(new BigInteger("B64BE8D8B25396C1",16)), new UInt64(new BigInteger("70CB6AF7C2D5BCF0",16)), new UInt64(new BigInteger("98F076A4F7A2322E",16)),
			   new UInt64(new BigInteger("BF84470805E69B5F",16)), new UInt64(new BigInteger("94C3251F06F90CF3",16)), new UInt64(new BigInteger("3E003E616A6591E9",16)), new UInt64(new BigInteger("B925A6CD0421AFF3",16)),
			   new UInt64(new BigInteger("61BDD1307C66E300",16)), new UInt64(new BigInteger("BF8D5108E27E0D48",16)), new UInt64(new BigInteger("240AB57A8B888B20",16)), new UInt64(new BigInteger("FC87614BAF287E07",16)),
			   new UInt64(new BigInteger("EF02CDD06FFDB432",16)), new UInt64(new BigInteger("A1082C0466DF6C0A",16)), new UInt64(new BigInteger("8215E577001332C8",16)), new UInt64(new BigInteger("D39BB9C3A48DB6CF",16)),
			   new UInt64(new BigInteger("2738259634305C14",16)), new UInt64(new BigInteger("61CF4F94C97DF93D",16)), new UInt64(new BigInteger("1B6BACA2AE4E125B",16)), new UInt64(new BigInteger("758F450C88572E0B",16)),
			   new UInt64(new BigInteger("959F587D507A8359",16)), new UInt64(new BigInteger("B063E962E045F54D",16)), new UInt64(new BigInteger("60E8ED72C0DFF5D1",16)), new UInt64(new BigInteger("7B64978555326F9F",16)),
			   new UInt64(new BigInteger("FD080D236DA814BA",16)), new UInt64(new BigInteger("8C90FD9B083F4558",16)), new UInt64(new BigInteger("106F72FE81E2C590",16)), new UInt64(new BigInteger("7976033A39F7D952",16)),
			   new UInt64(new BigInteger("A4EC0132764CA04B",16)), new UInt64(new BigInteger("733EA705FAE4FA77",16)), new UInt64(new BigInteger("B4D8F77BC3E56167",16)), new UInt64(new BigInteger("9E21F4F903B33FD9",16)),
			   new UInt64(new BigInteger("9D765E419FB69F6D",16)), new UInt64(new BigInteger("D30C088BA61EA5EF",16)), new UInt64(new BigInteger("5D94337FBFAF7F5B",16)), new UInt64(new BigInteger("1A4E4822EB4D7A59",16)),
			   new UInt64(new BigInteger("6FFE73E81B637FB3",16)), new UInt64(new BigInteger("DDF957BC36D8B9CA",16)), new UInt64(new BigInteger("64D0E29EEA8838B3",16)), new UInt64(new BigInteger("08DD9BDFD96B9F63",16)),
			   new UInt64(new BigInteger("087E79E5A57D1D13",16)), new UInt64(new BigInteger("E328E230E3E2B3FB",16)), new UInt64(new BigInteger("1C2559E30F0946BE",16)), new UInt64(new BigInteger("720BF5F26F4D2EAA",16)),
			   new UInt64(new BigInteger("B0774D261CC609DB",16)), new UInt64(new BigInteger("443F64EC5A371195",16)), new UInt64(new BigInteger("4112CF68649A260E",16)), new UInt64(new BigInteger("D813F2FAB7F5C5CA",16)),
			   new UInt64(new BigInteger("660D3257380841EE",16)), new UInt64(new BigInteger("59AC2C7873F910A3",16)), new UInt64(new BigInteger("E846963877671A17",16)), new UInt64(new BigInteger("93B633ABFA3469F8",16)),
			   new UInt64(new BigInteger("C0C0F5A60EF4CDCF",16)), new UInt64(new BigInteger("CAF21ECD4377B28C",16)), new UInt64(new BigInteger("57277707199B8175",16)), new UInt64(new BigInteger("506C11B9D90E8B1D",16)),
			   new UInt64(new BigInteger("D83CC2687A19255F",16)), new UInt64(new BigInteger("4A29C6465A314CD1",16)), new UInt64(new BigInteger("ED2DF21216235097",16)), new UInt64(new BigInteger("B5635C95FF7296E2",16)),
			   new UInt64(new BigInteger("22AF003AB672E811",16)), new UInt64(new BigInteger("52E762596BF68235",16)), new UInt64(new BigInteger("9AEBA33AC6ECC6B0",16)), new UInt64(new BigInteger("944F6DE09134DFB6",16)),
			   new UInt64(new BigInteger("6C47BEC883A7DE39",16)), new UInt64(new BigInteger("6AD047C430A12104",16)), new UInt64(new BigInteger("A5B1CFDBA0AB4067",16)), new UInt64(new BigInteger("7C45D833AFF07862",16)),
			   new UInt64(new BigInteger("5092EF950A16DA0B",16)), new UInt64(new BigInteger("9338E69C052B8E7B",16)), new UInt64(new BigInteger("455A4B4CFE30E3F5",16)), new UInt64(new BigInteger("6B02E63195AD0CF8",16)),
			   new UInt64(new BigInteger("6B17B224BAD6BF27",16)), new UInt64(new BigInteger("D1E0CCD25BB9C169",16)), new UInt64(new BigInteger("DE0C89A556B9AE70",16)), new UInt64(new BigInteger("50065E535A213CF6",16)),
			   new UInt64(new BigInteger("9C1169FA2777B874",16)), new UInt64(new BigInteger("78EDEFD694AF1EED",16)), new UInt64(new BigInteger("6DC93D9526A50E68",16)), new UInt64(new BigInteger("EE97F453F06791ED",16)),
			   new UInt64(new BigInteger("32AB0EDB696703D3",16)), new UInt64(new BigInteger("3A6853C7E70757A7",16)), new UInt64(new BigInteger("31865CED6120F37D",16)), new UInt64(new BigInteger("67FEF95D92607890",16)),
			   new UInt64(new BigInteger("1F2B1D1F15F6DC9C",16)), new UInt64(new BigInteger("B69E38A8965C6B65",16)), new UInt64(new BigInteger("AA9119FF184CCCF4",16)), new UInt64(new BigInteger("F43C732873F24C13",16)),
			   new UInt64(new BigInteger("FB4A3D794A9A80D2",16)), new UInt64(new BigInteger("3550C2321FD6109C",16)), new UInt64(new BigInteger("371F77E76BB8417E",16)), new UInt64(new BigInteger("6BFA9AAE5EC05779",16)),
			   new UInt64(new BigInteger("CD04F3FF001A4778",16)), new UInt64(new BigInteger("E3273522064480CA",16)), new UInt64(new BigInteger("9F91508BFFCFC14A",16)), new UInt64(new BigInteger("049A7F41061A9E60",16)),
			   new UInt64(new BigInteger("FCB6BE43A9F2FE9B",16)), new UInt64(new BigInteger("08DE8A1C7797DA9B",16)), new UInt64(new BigInteger("8F9887E6078735A1",16)), new UInt64(new BigInteger("B5B4071DBFC73A66",16)),
			   new UInt64(new BigInteger("230E343DFBA08D33",16)), new UInt64(new BigInteger("43ED7F5A0FAE657D",16)), new UInt64(new BigInteger("3A88A0FBBCB05C63",16)), new UInt64(new BigInteger("21874B8B4D2DBC4F",16)),
			   new UInt64(new BigInteger("1BDEA12E35F6A8C9",16)), new UInt64(new BigInteger("53C065C6C8E63528",16)), new UInt64(new BigInteger("E34A1D250E7A8D6B",16)), new UInt64(new BigInteger("D6B04D3B7651DD7E",16)),
			   new UInt64(new BigInteger("5E90277E7CB39E2D",16)), new UInt64(new BigInteger("2C046F22062DC67D",16)), new UInt64(new BigInteger("B10BB459132D0A26",16)), new UInt64(new BigInteger("3FA9DDFB67E2F199",16)),
			   new UInt64(new BigInteger("0E09B88E1914F7AF",16)), new UInt64(new BigInteger("10E8B35AF3EEAB37",16)), new UInt64(new BigInteger("9EEDECA8E272B933",16)), new UInt64(new BigInteger("D4C718BC4AE8AE5F",16)),
			   new UInt64(new BigInteger("81536D601170FC20",16)), new UInt64(new BigInteger("91B534F885818A06",16)), new UInt64(new BigInteger("EC8177F83F900978",16)), new UInt64(new BigInteger("190E714FADA5156E",16)),
			   new UInt64(new BigInteger("B592BF39B0364963",16)), new UInt64(new BigInteger("89C350C893AE7DC1",16)), new UInt64(new BigInteger("AC042E70F8B383F2",16)), new UInt64(new BigInteger("B49B52E587A1EE60",16)),
			   new UInt64(new BigInteger("FB152FE3FF26DA89",16)), new UInt64(new BigInteger("3E666E6F69AE2C15",16)), new UInt64(new BigInteger("3B544EBE544C19F9",16)), new UInt64(new BigInteger("E805A1E290CF2456",16)),
			   new UInt64(new BigInteger("24B33C9D7ED25117",16)), new UInt64(new BigInteger("E74733427B72F0C1",16)), new UInt64(new BigInteger("0A804D18B7097475",16)), new UInt64(new BigInteger("57E3306D881EDB4F",16)),
			   new UInt64(new BigInteger("4AE7D6A36EB5DBCB",16)), new UInt64(new BigInteger("2D8D5432157064C8",16)), new UInt64(new BigInteger("D1E649DE1E7F268B",16)), new UInt64(new BigInteger("8A328A1CEDFE552C",16)),
			   new UInt64(new BigInteger("07A3AEC79624C7DA",16)), new UInt64(new BigInteger("84547DDC3E203C94",16)), new UInt64(new BigInteger("990A98FD5071D263",16)), new UInt64(new BigInteger("1A4FF12616EEFC89",16)),
			   new UInt64(new BigInteger("F6F7FD1431714200",16)), new UInt64(new BigInteger("30C05B1BA332F41C",16)), new UInt64(new BigInteger("8D2636B81555A786",16)), new UInt64(new BigInteger("46C9FEB55D120902",16)),
			   new UInt64(new BigInteger("CCEC0A73B49C9921",16)), new UInt64(new BigInteger("4E9D2827355FC492",16)), new UInt64(new BigInteger("19EBB029435DCB0F",16)), new UInt64(new BigInteger("4659D2B743848A2C",16)),
			   new UInt64(new BigInteger("963EF2C96B33BE31",16)), new UInt64(new BigInteger("74F85198B05A2E7D",16)), new UInt64(new BigInteger("5A0F544DD2B1FB18",16)), new UInt64(new BigInteger("03727073C2E134B1",16)),
			   new UInt64(new BigInteger("C7F6AA2DE59AEA61",16)), new UInt64(new BigInteger("352787BAA0D7C22F",16)), new UInt64(new BigInteger("9853EAB63B5E0B35",16)), new UInt64(new BigInteger("ABBDCDD7ED5C0860",16)),
			   new UInt64(new BigInteger("CF05DAF5AC8D77B0",16)), new UInt64(new BigInteger("49CAD48CEBF4A71E",16)), new UInt64(new BigInteger("7A4C10EC2158C4A6",16)), new UInt64(new BigInteger("D9E92AA246BF719E",16)),
			   new UInt64(new BigInteger("13AE978D09FE5557",16)), new UInt64(new BigInteger("730499AF921549FF",16)), new UInt64(new BigInteger("4E4B705B92903BA4",16)), new UInt64(new BigInteger("FF577222C14F0A3A",16)),
			   new UInt64(new BigInteger("55B6344CF97AAFAE",16)), new UInt64(new BigInteger("B862225B055B6960",16)), new UInt64(new BigInteger("CAC09AFBDDD2CDB4",16)), new UInt64(new BigInteger("DAF8E9829FE96B5F",16)),
			   new UInt64(new BigInteger("B5FDFC5D3132C498",16)), new UInt64(new BigInteger("310CB380DB6F7503",16)), new UInt64(new BigInteger("E87FBB46217A360E",16)), new UInt64(new BigInteger("2102AE466EBB1148",16)),
			   new UInt64(new BigInteger("F8549E1A3AA5E00D",16)), new UInt64(new BigInteger("07A69AFDCC42261A",16)), new UInt64(new BigInteger("C4C118BFE78FEAAE",16)), new UInt64(new BigInteger("F9F4892ED96BD438",16)),
			   new UInt64(new BigInteger("1AF3DBE25D8F45DA",16)), new UInt64(new BigInteger("F5B4B0B0D2DEEEB4",16)), new UInt64(new BigInteger("962ACEEFA82E1C84",16)), new UInt64(new BigInteger("046E3ECAAF453CE9",16)),
			   new UInt64(new BigInteger("F05D129681949A4C",16)), new UInt64(new BigInteger("964781CE734B3C84",16)), new UInt64(new BigInteger("9C2ED44081CE5FBD",16)), new UInt64(new BigInteger("522E23F3925E319E",16)),
			   new UInt64(new BigInteger("177E00F9FC32F791",16)), new UInt64(new BigInteger("2BC60A63A6F3B3F2",16)), new UInt64(new BigInteger("222BBFAE61725606",16)), new UInt64(new BigInteger("486289DDCC3D6780",16)),
			   new UInt64(new BigInteger("7DC7785B8EFDFC80",16)), new UInt64(new BigInteger("8AF38731C02BA980",16)), new UInt64(new BigInteger("1FAB64EA29A2DDF7",16)), new UInt64(new BigInteger("E4D9429322CD065A",16)),
			   new UInt64(new BigInteger("9DA058C67844F20C",16)), new UInt64(new BigInteger("24C0E332B70019B0",16)), new UInt64(new BigInteger("233003B5A6CFE6AD",16)), new UInt64(new BigInteger("D586BD01C5C217F6",16)),
			   new UInt64(new BigInteger("5E5637885F29BC2B",16)), new UInt64(new BigInteger("7EBA726D8C94094B",16)), new UInt64(new BigInteger("0A56A5F0BFE39272",16)), new UInt64(new BigInteger("D79476A84EE20D06",16)),
			   new UInt64(new BigInteger("9E4C1269BAA4BF37",16)), new UInt64(new BigInteger("17EFEE45B0DEE640",16)), new UInt64(new BigInteger("1D95B0A5FCF90BC6",16)), new UInt64(new BigInteger("93CBE0B699C2585D",16)),
			   new UInt64(new BigInteger("65FA4F227A2B6D79",16)), new UInt64(new BigInteger("D5F9E858292504D5",16)), new UInt64(new BigInteger("C2B5A03F71471A6F",16)), new UInt64(new BigInteger("59300222B4561E00",16)),
			   new UInt64(new BigInteger("CE2F8642CA0712DC",16)), new UInt64(new BigInteger("7CA9723FBB2E8988",16)), new UInt64(new BigInteger("2785338347F2BA08",16)), new UInt64(new BigInteger("C61BB3A141E50E8C",16)),
			   new UInt64(new BigInteger("150F361DAB9DEC26",16)), new UInt64(new BigInteger("9F6A419D382595F4",16)), new UInt64(new BigInteger("64A53DC924FE7AC9",16)), new UInt64(new BigInteger("142DE49FFF7A7C3D",16)),
			   new UInt64(new BigInteger("0C335248857FA9E7",16)), new UInt64(new BigInteger("0A9C32D5EAE45305",16)), new UInt64(new BigInteger("E6C42178C4BBB92E",16)), new UInt64(new BigInteger("71F1CE2490D20B07",16)),
			   new UInt64(new BigInteger("F1BCC3D275AFE51A",16)), new UInt64(new BigInteger("E728E8C83C334074",16)), new UInt64(new BigInteger("96FBF83A12884624",16)), new UInt64(new BigInteger("81A1549FD6573DA5",16)),
			   new UInt64(new BigInteger("5FA7867CAF35E149",16)), new UInt64(new BigInteger("56986E2EF3ED091B",16)), new UInt64(new BigInteger("917F1DD5F8886C61",16)), new UInt64(new BigInteger("D20D8C88C8FFE65F",16)),
			   new UInt64(new BigInteger("31D71DCE64B2C310",16)), new UInt64(new BigInteger("F165B587DF898190",16)), new UInt64(new BigInteger("A57E6339DD2CF3A0",16)), new UInt64(new BigInteger("1EF6E6DBB1961EC9",16)),
			   new UInt64(new BigInteger("70CC73D90BC26E24",16)), new UInt64(new BigInteger("E21A6B35DF0C3AD7",16)), new UInt64(new BigInteger("003A93D8B2806962",16)), new UInt64(new BigInteger("1C99DED33CB890A1",16)),
			   new UInt64(new BigInteger("CF3145DE0ADD4289",16)), new UInt64(new BigInteger("D0E4427A5514FB72",16)), new UInt64(new BigInteger("77C621CC9FB3A483",16)), new UInt64(new BigInteger("67A34DAC4356550B",16)),
			   new UInt64(new BigInteger("F8D626AAAF278509",16))};

	private final static String piece_names = "pPnNbBrRqQkK";
	
	public static UInt64 hash(char board_s[], char to_move_c, char castle_flags_s[], char ep_square_s[]){
		char board[][] = new char[8][8];
	    char c;
	    int p,r,f,i,p_enc;
	    UInt64 key= new UInt64("0");
	    
	    r=7;
	    f=0;
	    p=0;
	    
	    while(true){
	        if(p>=board_s.length) break;
	        c=board_s[p++];
	        if(c=='/'){
	            r--;
	            f=0;
	            continue;
	        }
	        if(('1'<=c)&&('8'>=c)){
	            for(i=0;i<=c-'1';i++){
	                board[f++][r]='-';
	            }
	            continue;
	        }
	        board[f++][r]=c;
	    }
	    
	    for(f=0;f<=7;f++){
	        for(r=0;r<=7;r++){
	            c=board[f][r];
	            if(c!='-'){
	                p_enc= piece_names.indexOf(c);
	                key = key.xor(Random64[64*p_enc+8*r+f]);
	            }
	        }
	    }
	    
	    p=0;
	    while(true){
	        if(p>=castle_flags_s.length) break;
	        c=castle_flags_s[p++];
	        switch(c){
	            case '-' :
	                break;
	            case 'K' :
	                key= key.xor(Random64[768]);
	                break;
	            case 'Q' :
	            	key= key.xor(Random64[769]);
	                break;
	            case 'k' :
	            	key= key.xor(Random64[770]);
	                break;
	            case 'q' :
	            	key= key.xor(Random64[771]);
	                break;
	            default:
	                break;
	        }
	    }
	    if(ep_square_s[0]!='-'){
	        f=ep_square_s[0]-'a';
	        if(to_move_c=='b'){
	            if((f>0 && board[f-1][3]=='p')||
	               (f<7 && board[f+1][3]=='p')){
	            	key= key.xor(Random64[772+f]);
	            }
	        }else{
	            if((f>0 && board[f-1][4]=='P')||
	               (f<7 && board[f+1][4]=='P')){
	            	key= key.xor(Random64[772+f]);
	            }
	        }
	    }
	    if(to_move_c=='w'){
	    	key= key.xor(Random64[780]);
	    }
	    return key;	    
	}
}
